package config

import (
	"encoding/json"
	"os"
	"path/filepath"
)

var (
	cfgPath = ExeDir() + "/config.json"

	AppConfig Config
)

func ExeDir() string {
	s, _ := os.Executable()
	return filepath.Dir(s)
}

func InitConfig() error {
	if _, err := os.Stat(cfgPath); err == nil {
		cfg, err := ReadConfig()
		if err != nil {
			return err
		}
		AppConfig = cfg
	} else {
		AppConfig = DefaultConfig()
	}

	return nil
}

func ReadConfig() (config Config, err error) {
	file, err := os.Open(cfgPath)
	defer file.Close()
	if err != nil {
		return DefaultConfig(), err
	}

	decoder := json.NewDecoder(file)
	err = decoder.Decode(&config)
	if err != nil {
		return DefaultConfig(), err
	}

	return config, nil
}

func UpdateConfig() error {
	return WriteConfig(AppConfig)
}

func WriteConfig(config Config) error {
	AppConfig = config
	bytes, err := json.Marshal(config)
	if err != nil {
		return err
	}
	err = os.WriteFile(cfgPath, bytes, 0o777)
	if err != nil {
		return err
	}

	return nil
}

func DefaultConfig() Config {
	return Config{
		CFNMXX:              SimpleNetwork{},
		YYJSWIFI:            SimpleNetwork{},
		NotificationEnabled: true,
	}
}

var (
	SsidNmxx    = "CFNMXX"
	SsidYyjs5g  = "YYJSWIFI-5G"
	SsidYyjs24g = "YYJSWIFI-2.4G"
)

type Config struct {
	CFNMXX   SimpleNetwork `json:"cfnmxx"`
	YYJSWIFI SimpleNetwork `json:"yyjswifi"`

	NotificationEnabled bool `json:"notification_enabled"`
}

type SimpleNetwork struct {
	Username string `json:"username"`
	Password string `json:"password"`

	//Ssids []string `json:"ssids"`
}
